package ma.ensao.egicom.bank.services.dao.interfaces;

import java.util.List;

import ma.ensao.egicom.bank.services.model.Account;

/**
 * Interface d'accès aux données pour l'entité persistante Account.
 * @author MILHI Yassine (milhi.yassinee@gmail.com)
 */
public interface AccountDao {

    /**
     * Créé un compte.
     * @param account le compte à créer.
     */
    void createAccount(Account account);

    /**
     * Supprime un compte.
     * @param account le compte à supprimer.
     */
    void deleteAccount(Account account);

    /**
     * Récupère le compte correspondant à l'identifiant unique spécifié.
     * @param idAccount identifiant du compte
     * @return le compte trouvé.
     */
    Account getAccountById(Long idAccount);

    /**
     * Récupère tous les comptes de l'utilisateur.
     * @return collection contenant tous les compte de l'utilisateur.
     */
    List<Account> getAllUserAccounts();

    /**
     * Mis à jour la valeur monétique du compte spécifié.
     * @param account le compte spécifié
     */
    void updateAccountBalance(Account account);

    /**
     * Retourne une liste des comptes qui respectent le filtre.
     * @param propertyName le nom de la proprité dans la table.
     * @param value la valeur à filter avec.
     * @return une liste des compte qui respectent le filtre
     */
    List<Account> getAccountByProperty(String propertyName, Object value);

}
